<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%-- 导入 JSTL core 标签库 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
    <head>
        <title>核心标签库</title>
    </head>
    <body>

        <h4>&lt;c:set&gt;</h4>
        <ul>
            <li>var 属性用于指定变量名称</li>
            <li>value 属性用于指定变量的值</li>
            <li>scope 指定变量的作用域</li>
        </ul>

        <%-- scope 属性取值可以是 page 、request 、session 、application --%>
        <c:set var="name" value="李白" scope="page" />
        <%-- 上面的标签可以翻译成以下Java代码 --%>
        <%-- pageContext.setAttribute( var , value , scope ) --%>

        <%-- 在 EL 中使用 name 时会按照 page 、request 、session 、application 顺序寻找 --%>
        <p>name (expression language) : ${ name } </p>
        <p>name (JSP expression) : <%= pageContext.findAttribute( "name" ) %></p>

        <c:set var="name" value="岑参" scope="request" />
        <%-- 在 EL 中使用 pageScope 、requestScope 、sessionScope 、applicationScope 来访问不同的作用域 --%>
        <p> name (request) (&lt;c:out&gt;) : <c:out value="${ requestScope.name }"  /></p>
        <p> name (session) (&lt;c:out&gt;) : <c:out value="${ sessionScope.name }" default="没找到" /></p>

        <h4>&lt;c:out&gt;</h4>
        <ul>
            <li>value 属性用于指定输出的值或表达式</li>
            <li>default 属性用于指定默认值(当value返回空串时就输出默认值)</li>
            <li>escapeXml 用于指定是否忽略XML标签</li>
        </ul>

        <c:remove var="name" scope="page" />
        <%-- pageContext.removeAttribute( var , scope ) --%>
        <p>name ( page ) : ${ pageScope.name } </p>

        <hr>

        <%-- 以 jsp: 为前缀的标签属于 JSP标准动作 ( standard action ) --%>
        <jsp:useBean id="student" class="com.kaifamiao.jstl.entity.Student" scope="page" />
        <%--
            Object student = new com.kaifamiao.jstl.entity.Student();
            pageContext.setAttribute( "student" , student , scope );
        --%>
        <p>Expression Language : ${ student } </p>
        <p>JSP Expression : <%= student %> </p>

        <%-- 这里 target 必须是个表达式 ，property 必须是 target 所指定对象的属性(property) --%>
        <c:set target="${ student }" property="id" value="1001" />
        <%-- student.setId( value ) --%>
        <c:set target="${ student }" property="name" value="俊俊" />
        <c:set target="<%= student %>" property="gender" value="男" />

        <p>id: ${student.id} , name : ${student.name} , gender: ${student.gender} </p>

        <h4>&lt;c:set&gt;</h4>
        <ul>
            <li>target 属性用于指定被引用的对象(必须使用EL或JSP表达式来指定)</li>
            <li>property 属性用于指定被设置对象的属性名(property name)</li>
            <li>value 指定属性值(可以是动态值也可以是固定值)</li>
        </ul>

        <hr>

        <c:set var="content" value="<div style='border:1px solid blue;'>hello</div>" scope="page" />

        <c:out value="${ content }" default="默认值" escapeXml="true" />


    </body>
</html>
